home *** CD-ROM | disk | FTP | other *** search
-
- #include <stdio.h>
-
- int LineCount; /* The number of
- lines printed
- on a page */
- int PageCount = 1; /* The current page
- number */
- char *Filename; /* Input file name
- */
-
- void header(void);
- void endofline(void);
- int padAmount(int tabcolumn);
-
- main(int argc, char **argv)
- {
- FILE *fp; /* Input file */
- int c;
- int i;
- int tabcolumn; /* Column for tab
- stops */
- unsigned lineno; /* Line # in file */
-
- if (argc != 2){
- fprintf(stderr, "Use is: PR filename\n");
- return;
- }
- Filename = argv[1];
- fp = fopen(Filename, "r");
- if (fp == 0){
- fprintf(stderr, "Couldn't open %s\n",
- Filename);
- return;
- }
- header();
- lineno = 1;
- while ((c = getc(fp)) != EOF){
- printf("%5d ", lineno);
- lineno++;
- tabcolumn = 0;
- while (c != '\n' &&
- c != '\f' &&
- c != EOF){
- if (c == '\t'){
- i = padAmount(tabcolumn);
- tabcolumn += i;
- while (i){
- putchar(' ');
- i--;
- }
- }
- else {
- putchar(c);
- tabcolumn++;
- }
- c = getc(fp);
- }
- if (c == '\f')
- LineCount = 1000; /* Force an
- end of
- page */
- endofline();
- }
- putchar('\f'); /* Finish the last
- page */
- fclose(fp);
- }
-
- int padAmount(int tabcolumn)
- {
- int i;
-
- i = (tabcolumn + 8) & 7; /* compute the
- column within
- the tab */
- return 8 - i; /* spaces to pad */
- }
-
- void endofline(void)
- {
- LineCount++;
- if (LineCount < 60) /* 60 lines per
- page */
- putchar('\n');
- else {
- putchar('\f');
- header();
- }
- }
-
- void header(void)
- {
- printf("%-16s page %d\n\n\n", Filename,
- PageCount++);
- LineCount = 3;
- }
-